package com.kinyx.framework.log;

import java.lang.reflect.ParameterizedType;

import com.kinyx.framework.reflect.KBeanUtils;
import com.kinyx.framework.reflect.KBeanUtils.Params;

/**
 * 日志工厂定义
 */
abstract class LogFactory<T extends Log> {

	/** 日志类型 */
	private final Class<T> logType;

	/**
	 * 构造方法
	 */
	@SuppressWarnings("unchecked")
	LogFactory() {
		this.logType = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}

	/**
	 * 创建日志对象
	 * @param clazz 输出日志所在的类类型
	 * @return 日志对象
	 */
	@SuppressWarnings({
			"rawtypes", "unchecked"
	})
	T newInstantce(final Class<?> clazz) {
		return KBeanUtils.newInstance(this.logType, new Params(Class.class, clazz));
	}

	/**
	 * 初始化
	 */
	void initialize() {}

	/**
	 * 设置日志级别
	 * @param packageName 包名
	 * @param level 日志级别
	 */
	void setLevel(final String packageName, final LogLevel level) {}

	/**
	 * 设置根日志级别
	 * @param level 日志级别
	 */
	void setRootLevel(final LogLevel level) {}

}
